import lxml
from bs4 import BeautifulSoup


# 解析本地文件
soup = BeautifulSoup(open('20bs4的使用.html',encoding="utf-8"),"lxml")
# 根据标签查找节点


# 找到的是第一个符合条件的标签
# print(soup.a)


# attribute：返回标签的属性
# print(soup.a.attrs)

#  bs4的一些函数
# 1、find
# print(soup.find("a"))

# 根据title的值来找到对应的标签对象
# print(soup.find("a",title="a2"))

# 根据class的值来找到对应的标签对象 class后面需要加_既能代表class又不占用关键字
# print(soup.find("a",class_="a1"))

# 找到的是第一个符合条件的标签
# 2、find_all
# 返回所有的a标签  返回一个列表
# print(soup.find_all("a"))
# 如果想获取的是多个标签的数据 那么需要在find_all的参数钟添加的是列表的数据
# print(soup.find_all(["a","span"]))

# limit的左右是查找前几个数据
# print(soup.find_all("li",limit=2))


# 3、select（好）
# select方法返回的是一个列表    并且会返回多个数据
# print(soup.select("a"))

# 可以通过代表class 我们把这种操作叫做类型选择器
# print(soup.select(".a1"))

# print(soup.select("#l1"))

# 属性选择器
# 查找li标签中有id的标签
# print(soup.select("li[id]"))

# 查找li标签中id为l2的标签
# print(soup.select('li[id=l2]'))

# 层级选择器
# 后代选择器
# 找到div下面的所有的li
# print(soup.select('div li'))

# 子代选择器
# 某标签下的第一级子标签
# print(soup.select('div > ul>li'))

# 找到a标签和li标签
# print(soup.select('a,li'))

# 节点信息
# 获取节点内容
# obj=soup.select('#d1')[0]
# 如果标签对象中只有内容 string就能获取到数据
# print(obj.string)
# 如果标签对象钟,除了内容还有标签,那么strin就获取不到内容 需要使用get_text
# print(obj.get_text())


#
# 节点的属性
# obj=soup.select('#p1')[0]
# # name是标签的名字
# print(obj.name)
# # 将属性值作为字典返回
# print(obj.attrs)

# 获取节点的属性
# obj = soup.select('#p1')[0]
# print(obj.attrs.get('class'))
# print(obj['class'])